#include <iostream>
#include <string>
#include <ctime>
#include <chrono>
#include <iomanip>
#include <numeric>

using namespace std;

double readAndProcessSum(std::istream& strm)
{
	using std::ios;
	double value, sum;
	// save current state of exception flags
	ios::iostate oldExceptions = strm.exceptions();
	// let failbit and badbit throw exceptions
	// - NOTE: failbit is also set at end-of-file
	strm.exceptions(ios::failbit | ios::badbit);
	try {
		// while stream is OK
		// - read value and add it to sum
		sum = 0;
		while (strm >> value) {
			sum += value;
		}
	}
	catch (...) {
		// if exception not caused by end-of-file
		// - restore old state of exception flags
		// - rethrow exception
		if (!strm.eof()) {
			strm.exceptions(oldExceptions); // restore exception flags
			throw; // rethrow
		}
	}
	// restore old state of exception flags
	strm.exceptions(oldExceptions);	// return sum
	return sum;
}


int main()
{
	{
		auto n = chrono::system_clock::now();
		time_t t = chrono::system_clock::to_time_t(n);
		tm tm1;
		localtime_s(&tm1, &t); //localtime
		cout << "Time: " << put_time(&tm1, "%F %T") <<endl;

		//tm tm2{ 0 };
		//cin >> get_time(&tm2, "%m / %d / %y ");
		//cout << "Time: " << put_time(&tm2, "%F") << endl;
	}
	cout << "1---------------------------------------\n" << endl;

	{
		using namespace std;
		double sum;
		try {
			cout << "Input num, end with ctrl+z: " << endl;
			sum = readAndProcessSum(cin);
		}
		catch (const ios::failure& error) {
			cerr << "I/O exception: " << error.what() << endl;
			return EXIT_FAILURE;
		}
		catch (const exception& error) {
			cerr << "standard exception: " << error.what() << endl;
			return EXIT_FAILURE;
		}
		catch (...) {
			cerr << "unknown exception" << endl;
			return EXIT_FAILURE;
		}
		// print sum
		cout << "sum: " << sum << endl;
		cin.clear();
	}
	cout << "---------------------------------------\n" << endl;
	return 0;
}






